package com.dream.algoritm.graph;

import java.util.List;
import java.util.Map;

/**
 * 邻接表
 * {
 *     1: [2,3,4]
 *     2: [5]
 *     3: [2,4]
 * }
 * 邻接矩阵
 * [
 *      [1, 2, 3],
 *      [4, 5, 6],
 *      [7, 8, 9],
 *      [1, 3, 4]
 * ]
 * 常见算法：
 *  1. 深度优先搜索
 *  2. 广度优先搜索
 *  3. 拓扑排序（循环依赖处理）
 *  4. 最短路径（Dijkstra算法）
 *  5. 最小生成树（Prim算法 / Kruskal算法）
 */
public class Graph {
    private List<Node> nodes;
    private List<Edge> edges;

    public List<Node> getNodes() {
        return nodes;
    }

    public void setNodes(List<Node> nodes) {
        this.nodes = nodes;
    }

    public List<Edge> getEdges() {
        return edges;
    }

    public void setEdges(List<Edge> edges) {
        this.edges = edges;
    }

    /**
     * 将邻接表转为自定义图
     * @param table 邻接表表示的图
     * @return Graph
     */
    public static Graph createGraph(Map<Integer, List<Integer>> table) {
        return null;
    }

    /**
     * 将邻接矩阵转为自定义图
     * @param matrix 邻接矩阵表示的图
     * @return Graph
     */
    public static Graph createGraph(int[][] matrix) {
        return null;
    }

}
